package br.gov.sjc.aluguelsocial;

import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView;
import android.widget.ListView;
import br.gov.sjc.adapter.TelefoneAdapter;
import br.gov.sjc.adapter.TrabalhoAdapter;
import br.gov.sjc.classes.NumeroSias;
import br.gov.sjc.classes.Telefone;
import br.gov.sjc.classes.Trabalho;
import br.gov.sjc.dao.BaseDAO;
import br.gov.sjc.dao.TelefoneDAO;
import br.gov.sjc.dao.TrabalhoDAO;
import br.gov.sjc.utils.Sair2;

public class TelefoneMainAct extends Sair2{
	String TAG = "TelefoneMainAct";
	private static final int INCLUIR = 0;
	private static final int ALTERAR = 1;
	private TelefoneDAO lTelefoneDAO;// inst�ncia responsável pela persist�ncia
	// dos dados
	List<Telefone> lstTelefone;// lista de dados cadastrados no BD
	public static TelefoneAdapter adapter; // Adapter responsável por apresentar
	// os dados na tela

	boolean blnShort = false;
	int Posicao = 0; // determinar a Posição do TrabalhoOFR dentro da lista
	// lstTrabalhoOFR
	// Pega o numero do Sias em uso atual
	NumeroSias ns = new NumeroSias();
	int NumSias = ns.getNumeroDaFamilia();
	int idMembroSias = ns.getNumeroDoMembroDaFamilia();

	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.telefone_lv);
		registerBaseActivityReceiver();

			lTelefoneDAO = new TelefoneDAO(this);
			lTelefoneDAO.open();
			Log.w(TAG.toString(), "lTelefoneDAO.open();");
			lstTelefone = lTelefoneDAO.Consultar(NumSias);
			Log.w(TAG.toString(), "lTelefoneDAO.Consultar: " + NumSias + "/"
					+ idMembroSias);
			adapter = new TelefoneAdapter(this, lstTelefone);
			Log.w(TAG.toString(),
					" adapter = new TelefoneAdapter(this, lstTelefone); ");
			setListAdapter(adapter);
			Log.w(TAG.toString(), " setListAdapter(adapter); ");

			registerForContextMenu(getListView());
			Log.w(TAG.toString(), " setListAdapter(adapter); ");
	}
	public void btnTelefoneNovo_click(View view) {
		try {
			InserirTelefone();
		} catch (Exception e) {
			Log.e(TAG, "btnTelefoneNovo_click - Erro : " + e.getMessage());
		}
	}

	public void btnTelefoneVoltar_click(View view) {
		try {
			Intent ittTIr = new Intent(getApplicationContext(),
					EnderecoActivity.class);
			setResult(Activity.RESULT_CANCELED);
			startActivity(ittTIr);

			finish();
		} catch (Exception e) {
			Log.e(TAG, "btnTelefoneVoltar_click - Erro : " + e.getMessage());
		}
	}

	public void btnTelefoneIr_click(View view) {
		try {
			// Quando for simplesmente cancelar a opera��o de inclusão
			// ou altera��o deve-se apenas informar o RESULT_CANCELED
			// e em seguida finalizar a Activity
			//TODO: Ver pra onde vai
			Intent ittTIr = new Intent(getApplicationContext(),
					BeneficioMainAct.class);
			setResult(Activity.RESULT_CANCELED);
			startActivity(ittTIr);
			finish();
		} catch (Exception e) {
			Log.e(TAG, "btnTrabalhoIr_click - Erro : " + e.getMessage());
		}
	}
	
	// Rotina executada quando finalizar a Activity TrabalhoAct
		@Override
		protected void onActivityResult(int requestCode, int resultCode, Intent data) {
			Telefone lTelefone = null;

			try {
				super.onActivityResult(requestCode, resultCode, data);
				if (resultCode == Activity.RESULT_OK) {
					// obtem dados inseridos/alterados na Activity trabalho
					lTelefone = (Telefone) data.getExtras().getSerializable(
							"telefone");

					Log.w(TAG.toString(), " INCLUIR == " + INCLUIR);

					// o valor do requestCode foi definido na fun��o
					// startActivityForResult
					if (requestCode == INCLUIR) {
						// verifica se digitou algo no valor
						if (!lTelefone.getTelefone().equals("")) {
							// necessário abrir novamente o BD pois ele foi fechado
							// no método onPause()
							lTelefoneDAO.open();

							// insere o contato no Banco de Dados SQLite
							lTelefoneDAO.inserir(lTelefone);

							// insere o contato na lista de contatos em mem�ria
							lstTelefone.add(lTelefone);
						}
						Log.w(TAG.toString(), " ALTERAR == " + ALTERAR);

					} else if (requestCode == ALTERAR) {
						lTelefoneDAO.open();
						// atualiza o contato no Banco de Dados SQLite
						lTelefoneDAO.alterar(lTelefone);

						// atualiza o contato na lista de contatos em mem�ria
						lstTelefone.set(Posicao, lTelefone);
					}

					// método responsável pela atualiza da lista de dados na tela
					adapter.notifyDataSetChanged();
				}
			} catch (Exception e) {
				Log.w(TAG.toString(), "Exception ALTERAR == " + ALTERAR);
				Log.w(TAG.toString(), "Exception INCLUIR == " + INCLUIR);

				Log.e(TAG, "onActivityResult - Erro : " + e.getMessage());
			}
		}

		private void InserirTelefone() {
			try {
				// a vari�vel "tipoT" tem a fun��o de definir o comportamento da
				// Activity
				// ContatoUI, agora a vari�vel tipo está definida com o valor "0"
				// para
				// informar que ser� uma inclusão de Contato

				Intent it = new Intent(this, TelefoneAct.class);
				it.putExtra("tipoT", INCLUIR);
				startActivityForResult(it, INCLUIR);// chama a tela e inclusão
				Log.w(TAG, "startActivityForResult INCLUIR == " + INCLUIR);
			} catch (Exception e) {
				Log.e(TAG, "Inserirtelefone - Erro : " + e.getMessage());
			}
		}
		
		@Override
		protected void onResume() {
			// quando a Activity main receber o foco novamente abre-se novamente a
			// conexão
			lTelefoneDAO.open();
			// método responsável pela atualiza da lista de dados na tela
			adapter.notifyDataSetChanged();
			super.onResume();
		}

		@Override
		protected void onPause() {
			// toda vez que o programa peder o foco fecha-se a conexão com o BD
			lTelefoneDAO.close();
			super.onPause();
		}
		
		@Override
		public void onCreateContextMenu(ContextMenu menuT, View v,
				ContextMenuInfo menuInfoT) {
			try {
				// Criação do popup menu com as op��es que termos sobre
				// nossos Telefones

				AdapterView.AdapterContextMenuInfo infoT = (AdapterView.AdapterContextMenuInfo) menuInfoT;
				if (!blnShort) {
					Posicao = infoT.position;
				}
				blnShort = false;
				Log.w(TAG, "onCreateContextMenu Posicao:" + Posicao);
				menuT.setHeaderTitle("Selecione:");
				// a origem dos dados do menu está definido no arquivo arrays.xml
				String[] menuTItems = getResources().getStringArray(R.array.menu);
				for (int i = 0; i < menuTItems.length; i++) {
					menuT.add(Menu.NONE, i, i, menuTItems[i]);
				}
				Log.w(TAG, "onCreateContextMenu Terminou");

			} catch (Exception e) {
				Log.e(TAG, "onCreateContextMenu - Erro : " + e.getMessage());
			}
		}

		// Este método � disparado quando o usu�rio clicar em um item do ContextMenu
		@Override
		public boolean onContextItemSelected(MenuItem item) {
			Telefone lTelefone = null;
			try {
				int menuItemIndex = item.getItemId();

				// Carregar a inst�ncia POJO com a Posição selecionada na tela
				lTelefone = (Telefone) getListAdapter().getItem(Posicao);

				if (menuItemIndex == 0) {
					// Carregar a Activity ContatoUI com o registro selecionado na
					// tela

					Intent it = new Intent(this, TelefoneAct.class);
					it.putExtra("tipoT", ALTERAR);
					it.putExtra("telefone", lTelefone);
					startActivityForResult(it, ALTERAR); // chama a tela de
					// altera��o
					// método responsável pela atualiza da lista de dados na tela
					adapter.notifyDataSetChanged();
				} else if (menuItemIndex == 1) {
					// Excluir do Banco de Dados e da tela o registro selecionado

					lTelefoneDAO.Excluir(lTelefone);
					lstTelefone.remove(lTelefone);
					adapter.notifyDataSetChanged(); // atualiza a tela
				}
			} catch (Exception e) {
				Log.e(TAG, "Erro : " + e.getMessage());
			}
			return true;

		}

		@Override
		protected void onListItemClick(ListView l, View v, int position, long id) {
			try {
				Log.w(TAG, "onListItemClick position:" + position + " id:" + id
						+ " v:" + v.toString());
				super.onListItemClick(l, v, position, id);
				// por padr�o o ContextMenu, s� � executado atrav�s de LongClick,
				// mas
				// nesse caso toda vez que executar um ShortClick, abriremos o menu
				// e tamb�m guardaremos qual a Posição do itm selecionado

				Posicao = position;
				blnShort = true;
				this.openContextMenu(l);
			} catch (Exception e) {
				Log.e(TAG,
						"onListItemClick ERRO :" + e.getMessage() + "/"
								+ e.getCause());

			}
			Log.i(TAG, "onListItemClick fim");
		}

		@Override
		protected void onDestroy() {
			super.onDestroy();
			unRegisterBaseActivityReceiver();
		}
}
